`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2024/02/27 20:31:35
// Design Name: 
// Module Name: top1
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module top1(
    input clk,          // 时钟信号
    input rst_n,        // 低电平复位
    input key_left,         // 切换键
    input key_right,         // 调整键
    input key_up,         // 加键
    input key_down,         // 减键
    output reg [6:0] seg_digits  // 数码管显示信号
);

    // 显示模块，用于控制数码管的显示
    display_module display_inst (
        .clk(clk),
        .rst_n(rst_n),
        .display_mode(display_mode),
        .time(time),
        .alarm_time(alarm_time),
        .seg_digits(seg_digits)
    );

    // 按键输入处理模块，用于检测按键动作并输出相应控制信号
    key_input_module key_input_inst (
        .clk(clk),
        .rst_n(rst_n),
        .key_left(key_left),
        .key_right(key_right),
        .key_up(key_up),
        .key_down(key_down),
        .display_mode(display_mode),
        .adjust_mode(adjust_mode),
        .increment(increment),
        .decrement(decrement),
        .confirm(confirm)
    );

    // 时间控制逻辑模块，用于更新和计算时间
    time_control_module time_control_inst (
        .clk(clk),
        .rst_n(rst_n),
        .adjust_mode(adjust_mode),
        .increment(increment),
        .decrement(decrement),
        .confirm(confirm),
        .time(time),
        .alarm_time(alarm_time)
    );

    // 闹钟控制模块，用于控制闹钟的开启和关闭
    alarm_control_module alarm_control_inst (
        .clk(clk),
        .rst_n(rst_n),
        .time(time),
        .alarm_time(alarm_time),
        .alarm_active(alarm_active)
    );

    // 控制信号定义
    reg [1:0] display_mode;  // 显示模式：时间、日期、闹钟、调整
    reg adjust_mode;         // 调整模式：非调整、分钟调整、小时调整等
    reg increment;           // 增加操作
    reg decrement;           // 减少操作
    reg confirm;             // 确认操作
    reg [5:0] time;          // 当前时间
    reg [5:0] alarm_time;    // 闹钟时间
    reg alarm_active;        // 闹钟是否激活

endmodule